#[cfg(test)]
mod tests {
    use super::*;
    use crate::models::FluvioTopic;

    // 注意：这些测试需要运行中的Fluvio集群
    // 在CI/CD环境中，应该使用模拟或测试容器

    #[tokio::test]
    #[ignore] // 需要真实的Fluvio集群
    async fn test_fluvio_connection() {
        let manager = FluvioManager::new("localhost:9003").await;
        assert!(manager.is_ok(), "应该能够连接到Fluvio集群");
    }

    #[tokio::test]
    #[ignore] // 需要真实的Fluvio集群
    async fn test_health_check() {
        let manager = FluvioManager::new("localhost:9003").await.unwrap();
        let health = manager.health_check().await.unwrap();
        assert!(health, "集群应该是健康的");
    }

    #[tokio::test]
    #[ignore] // 需要真实的Fluvio集群
    async fn test_topic_lifecycle() {
        let manager = FluvioManager::new("localhost:9003").await.unwrap();
        
        let test_topic = FluvioTopic {
            name: "test-topic-lifecycle".to_string(),
            partitions: 1,
            replication_factor: 1,
            retention_time: None,
            compression: None,
        };

        // 确保主题不存在
        if manager.topic_exists(&test_topic.name).await.unwrap() {
            manager.delete_topic(&test_topic.name).await.unwrap();
        }

        // 创建主题
        manager.create_topic(&test_topic).await.unwrap();
        
        // 验证主题存在
        assert!(manager.topic_exists(&test_topic.name).await.unwrap());
        
        // 获取主题信息
        let topic_info = manager.get_topic_info(&test_topic.name).await.unwrap();
        assert!(topic_info.is_some());
        
        // 删除主题
        manager.delete_topic(&test_topic.name).await.unwrap();
        
        // 验证主题不存在
        assert!(!manager.topic_exists(&test_topic.name).await.unwrap());
    }

    #[tokio::test]
    #[ignore] // 需要真实的Fluvio集群
    async fn test_message_produce_consume() {
        let manager = FluvioManager::new("localhost:9003").await.unwrap();
        
        let test_topic = FluvioTopic {
            name: "test-topic-messages".to_string(),
            partitions: 1,
            replication_factor: 1,
            retention_time: None,
            compression: None,
        };

        // 创建测试主题
        if !manager.topic_exists(&test_topic.name).await.unwrap() {
            manager.create_topic(&test_topic).await.unwrap();
        }

        // 发送测试消息
        let test_message = "Hello, FluvioX!";
        manager.produce_message(&test_topic.name, test_message).await.unwrap();

        // 等待一下让消息被处理
        tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;

        // 消费消息
        let messages = manager.consume_messages(&test_topic.name, 1).await.unwrap();
        assert!(!messages.is_empty(), "应该能够消费到消息");
        assert_eq!(messages[0], test_message, "消费的消息应该与发送的消息一致");

        // 清理
        manager.delete_topic(&test_topic.name).await.unwrap();
    }

    #[tokio::test]
    #[ignore] // 需要真实的Fluvio集群
    async fn test_initialize_default_topics() {
        let manager = FluvioManager::new("localhost:9003").await.unwrap();
        
        // 初始化默认主题
        manager.initialize_default_topics().await.unwrap();
        
        // 验证默认主题存在
        assert!(manager.topic_exists("fluviox-events").await.unwrap());
        assert!(manager.topic_exists("fluviox-metrics").await.unwrap());
        assert!(manager.topic_exists("fluviox-logs").await.unwrap());
        
        // 清理（可选，在实际环境中可能不需要）
        // manager.delete_topic("fluviox-events").await.unwrap();
        // manager.delete_topic("fluviox-metrics").await.unwrap();
        // manager.delete_topic("fluviox-logs").await.unwrap();
    }

    #[test]
    fn test_topic_name_validation() {
        // 测试主题名称验证逻辑
        let valid_names = vec![
            "valid-topic",
            "valid_topic",
            "valid123",
            "a",
        ];

        let invalid_names = vec![
            "",
            "invalid topic", // 包含空格
            "invalid.topic", // 包含点
            "invalid@topic", // 包含特殊字符
        ];

        for name in valid_names {
            assert!(is_valid_topic_name(name), "主题名称 '{}' 应该是有效的", name);
        }

        for name in invalid_names {
            assert!(!is_valid_topic_name(name), "主题名称 '{}' 应该是无效的", name);
        }
    }
}

/// 验证主题名称是否有效
fn is_valid_topic_name(name: &str) -> bool {
    if name.is_empty() {
        return false;
    }
    
    // 主题名称只能包含字母、数字、连字符和下划线
    name.chars().all(|c| c.is_alphanumeric() || c == '-' || c == '_')
}
